#include "TestAI.h"
#include "globalne.h"

General::General(TTAICore *Gl) : G(Gl), trwaWalka(false)
{cb=G->cb;walGun=0;poczWal=0;trwaWalka=false;braCel=-1;};

void General::uaktualnij()
{
	if (G->M->skauci.czlonkowie.glowa.nast)
	{
		LOGUJ ("Mam zwiadowcow, uaktualniam ich pozycje."<<endl);
		int iluMamy=G->M->skauci.ilu();
		//for (int i=0; i<iluMamy; i++)
		for (int i=0; i<iluMamy; i++)
		{
			//LOGUJ ("Po size glowa.nast - "<< G->M->skauci.czlonkowie.glowa.nast<<endl);
			int id=G->M->skauci.czlonkowie[i]->mojId;
			//LOGUJ ("Po odczytaniu ID - "<< G->M->skauci.czlonkowie.glowa.nast<<endl);
			float3 pos=cb->GetUnitPos(id);
			//LOGUJ ("Po pobraniu pozycji - "<< G->M->skauci.czlonkowie.glowa.nast<<endl);
			int frame=cb->GetCurrentFrame();
			//LOGUJ ("Po pobraniu klatki - "<< G->M->skauci.czlonkowie.glowa.nast<<endl);
			int ss=G->M->ktorySektor(pos);
			//LOGUJ ("Po obliczeniu sektora - "<< G->M->skauci.czlonkowie.glowa.nast<<endl);
			//LOGUJ ("Adres ostspr: "<<&(G->M->sek[ss].ostatnioSprawdzany)<<endl);
			//LOGUJ ("Adres glonastu: "<<&(G->M->skauci.czlonkowie.glowa.nast)<<endl);
			//LOGUJ ("Sektor: "<<ss<<"\tKlatka:"<<frame<<endl);
			G->M->sek[ss].ostatnioSprawdzany=frame;
			//LOGUJ ("Po petli glowa.nast - "<< G->M->skauci.czlonkowie.glowa.nast<<endl);
		}
	}
	/*float odlka=0;
	int ktoSek=0;
	for(int i=0; i<G->M->bazy[0].sektory.size(); ++i)
	{
		if(G->M->odlPunktow(G->M->sek[0].punktWSektorze(), G->M->sek[G->M->bazy[0].sektory[i]].punktWSektorze())>odlka)
		{
			odlka=G->M->odlPunktow(G->M->sek[0].punktWSektorze(), G->M->sek[G->M->bazy[0].sektory[i]].punktWSektorze());
			ktoSek=i;
		}
	}
	G->M->oddzialAtk.punktZborny=G->M->sek[ktoSek].punktWSektorze();
	G->M->oddzialAtk.idzDoPunktu(G->M->oddzialAtk.punktZborny);*/
}
void General::atak(int naKogo)
{
	LOGUJ ("Atakuje wroga o ID "<<naKogo<<endl);
	aktCel=naKogo;
	trwaWalka=true;
	poczWal=cb->GetCurrentFrame();
	LOGUJ ("pobieranie defa... ");
	const UnitDef * ud=cb->GetUnitDef(naKogo);
	G->M->oddzialAtk.atakujcie(naKogo);
	if (ud!=NULL && !ud->canfly && walGun<0)
		G->M->brawlerowcy.atakujcie(naKogo);


		;
}
void General::bijaNas(int kogo, int kto, float ile, float3 skad)
{
	LOGUJ ("Zaatakowano nasza jednostka. ID: "<<kogo<<"\t Agresor: "<<kto<<endl);
	jednostka * jj=G->M->ktoTo(kogo);
	const UnitDef * ud=cb->GetUnitDef(kto);
	LOGUJ ("Skad: "<<skad<<endl<<"Pobrano dane."<<endl);
	int klatka=cb->GetCurrentFrame();
	if ((cb->GetUnitTeam(kto)==G->M->druzyna))
		return;
	if (trwaWalka)
	{
		if (klatka-poczWal>180)
			atak(kto);
	}
	else atak(kto);
	if (ud!=NULL)
	{
		if (G->pr->cmplist(ud->name,5))
		{
			LOGUJ ("To antyair, tluc w pierwszej kolejnosci naszym airem."<<endl);
			if (klatka-walGun>300)
			{
				G->M->brawlerowcy.atakujcie(kto);
				walGun=klatka;
				braCel=kto;
			}
		}
	}
}
void General::wrogUBram (int wrog)
{
	int klatka=cb->GetCurrentFrame();
	if (trwaWalka)
	{
		if (klatka-poczWal>300)
			atak(wrog);
	}
	else atak(wrog);
}
void General::wrogInhumowany (int wrog, int bohater)
{
	if (braCel==wrog)
	{
		braCel=-1;
		walGun=0;
	}
	if (aktCel==wrog) trwaWalka=false;
	
}
	;